package com.share.device.service;

import com.share.device.domain.dto.CabinetManagementDTO;
import com.share.device.domain.vo.CabinetManagementVO;

import java.util.List;
import java.util.Map;

/**
 * 设备管理服务接口
 * 
 * @author         
 * @date 2025-06-24
 */
public interface IDeviceManagementService
{
    /**
     * 获取柜机管理详细信息
     * 
     * @param cabinetId 柜机ID
     * @return 柜机管理VO
     */
    CabinetManagementVO getCabinetManagementInfo(Long cabinetId);

    /**
     * 柜机部署
     * 
     * @param dto 柜机管理DTO
     * @return 操作结果
     */
    boolean deployCabinet(CabinetManagementDTO dto);

    /**
     * 柜机维护
     * 
     * @param dto 柜机管理DTO
     * @return 操作结果
     */
    boolean maintainCabinet(CabinetManagementDTO dto);

    /**
     * 柜机移除
     * 
     * @param dto 柜机管理DTO
     * @return 操作结果
     */
    boolean removeCabinet(CabinetManagementDTO dto);

    /**
     * 柜机重置
     * 
     * @param dto 柜机管理DTO
     * @return 操作结果
     */
    boolean resetCabinet(CabinetManagementDTO dto);

    /**
     * 批量分配充电宝到插槽
     * 
     * @param cabinetId 柜机ID
     * @param powerBankIds 充电宝ID列表
     * @param slotNos 插槽编号列表
     * @return 操作结果
     */
    boolean assignPowerBanksToSlots(Long cabinetId, List<Long> powerBankIds, List<String> slotNos);

    /**
     * 批量移除充电宝
     * 
     * @param cabinetId 柜机ID
     * @param slotNos 插槽编号列表
     * @return 操作结果
     */
    boolean removePowerBanksFromSlots(Long cabinetId, List<String> slotNos);

    /**
     * 获取设备状态统计
     * 
     * @return 统计信息
     */
    Map<String, Object> getDeviceStatusStatistics();

    /**
     * 获取区域设备分布统计
     * 
     * @param areaId 区域ID
     * @return 统计信息
     */
    Map<String, Object> getAreaDeviceDistribution(Long areaId);

    /**
     * 设备状态监控
     * 
     * @param deviceType 设备类型
     * @param status 状态
     * @return 设备列表
     */
    List<Map<String, Object>> monitorDeviceStatus(String deviceType, String status);
} 